package houserent.service;
//业务层
import houserent.domain.House;

/* HouseService.java<=>类 [业务层]
   定义House[]，保存House对象
   1.响应HouseView的调用
   2.完成对房屋信息的各种操作[增删改查]
 */

public class HouseService {
    //属性
    private House[] houses;  //保存House对象
    private int houseNum = 1;   //记录当前有多少个房屋信息
    private int idCounter = 1; //记录当前的id增长到那个值了

    //构造器
    public HouseService(int size) {
        //new house
        houses = new House[size]; //当创建HouseService对象时，指定数组的大小
        //为了配合测试列表信息，这里初始一个House对象
        houses[0] = new House(1, "jack", "112", "海淀区", 2000, "未出租");
    }

    //find()方法，返回House对象或者null
    public House findByid(int findId){
        //遍历数组
        for(int i=0;i<houseNum;i++){
            if(findId == houses[i].getId()){
                return houses[i];
            }
        }
        return null;
    }

    //del()方法，删除一个房屋信息
    public boolean del(int delId){
        //应当先找到删除的房屋信息对应的下标
        //一定要清除，下标和房屋的编号不是一回事
        int index = -1;
        for(int i=0;i<houseNum;i++){
            if(delId ==houses[i].getId()){  //要删除的房屋的对应的id，在数组下标为i的元素
                index= i; //就使用index记录i
            }
        }
        if(index == -1){//说明delId在数组中不存在
            return false;
        }
        //如果找到。怎么办呢？这里有点难
        for(int i = index;i<houseNum-1;i++){
            houses[i] = houses[i+1];
        }
        houses[houseNum-1] = null;  //把当前存有的房屋信息的最后一个 设置为null
        houseNum--;
        return true;
    }

    //add()方法，将利用用户输入信息得到的对象添加到数组，返回boolean值
    public boolean addd(House newHosue){
        //判断是否还可以添加(暂时不考虑数组扩容的问题)
        if(houseNum==houses.length){
            System.out.println("数组已满不能再添加");
            return false;
        }//把newHouse对象加入到数组
        houses[houseNum] = newHosue;
        houseNum++; //新增加了一个
        //还需要设计id自增长的机制:把一开始传进来的id重新设置更新一下
        idCounter++;
        newHosue.setId(idCounter);
        return true;
    }

    //list方法返回house
    public House[] list() {
        return houses;
    }

}
